package com.sky.dto.es;

import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 商品模型类，用于表示产品的详细信息，包括SKU、SPU等核心属性。
 * 实现Serializable接口，以便于对象的序列化和反序列化，常用于缓存和网络传输。
 */
@Data
public class ProductModel implements Serializable {

    /**
     * SKU唯一标识ID，用于精确识别一个商品。
     */
    private Long skuId;

    /**
     * SPU唯一标识ID，SPU代表商品的规格属性集合，多个SKU属于同一个SPU。
     */
    private Long spuId;

    /**
     * SKU的标题，即商品的简要描述。
     */
    private String skuTitle;

    /**
     * SKU的价格，使用BigDecimal来精确处理货币金额。
     */
    private BigDecimal skuPrice;

    /**
     * SKU的图片链接，用于展示商品的主图。
     */
    private String skuImg;

    /**
     * SKU的销售数量，用于展示商品的销量。
     */
    private Long saleCount;

    /**
     * SKU的库存状态，标识商品是否具有库存。
     */
    private Boolean hasStock;

    /**
     * SKU的热门程度评分，用于商品推荐和排序。
     */
    private Long hotScore;

    /**
     * 品牌ID，用于关联商品和品牌。
     */
    private Long brandId;

    /**
     * 商品分类ID，用于将商品归类到特定的目录下。
     */
    private Long catalogId;

    /**
     * 品牌名称，用于展示商品所属的品牌。
     */
    private String brandName;

    /**
     * 品牌图片链接，用于展示品牌logo。
     */
    private String brandImg;

    /**
     * 商品分类名称，用于展示商品所属的分类。
     */
    private String catalogName;

    /**
     * 商品的属性集合，包括颜色、尺寸等，用于细化商品的规格。
     */
    private List<Attr> attrs;

    /**
     * 商品属性类，用于表示商品的某个特定属性，如颜色、尺寸等。
     */
    @Data
    public static class Attr {
        /**
         * 属性ID，用于唯一标识一个属性。
         */
        private Long attrId;

        /**
         * 属性名称，如颜色、尺寸等。
         */
        private String attrName;

        /**
         * 属性值，如红色、蓝色等。
         */
        private String attrValue;
    }
}

